#include "Survive.h"

using namespace std;

Survive::Survive()
{
}

Survive::~Survive()
{}

//////////////select the best n individuals from parent and child population/////////////
void Survive::run(vector<vector<int>>& parentPop, vector<int>& pFitVec,vector<vector<int>>& childPop, vector<int>& cFitVec)
{
	int pSize=parentPop.size();
	for(int i=0;i<pSize;i++)
	{
		int min=0;
		int j;
		for(j=1;j<pSize;j++)
		{
			if(pFitVec[min]>pFitVec[j])
				min=j;
		}
		for(;j<(pSize<<1)-i;j++)
		{
			if(min<pSize)
			{
				if(pFitVec[min]>cFitVec[j-pSize])
					min=j;
			}
			else
			{
				if(cFitVec[min-pSize]>cFitVec[j-pSize])
					min=j;
			}
		}
		if(min!=(pSize<<1)-i-1)
		{
			int tmp;
			if(min<pSize)
			{
				parentPop[min].swap(childPop[pSize-i-1]);
				tmp=pFitVec[min];
				pFitVec[min]=cFitVec[pSize-i-1];
				cFitVec[pSize-i-1]=tmp;
			}
			else
			{
				childPop[min-pSize].swap(childPop[pSize-i-1]);
				tmp=pFitVec[min-pSize];
				pFitVec[min-pSize]=cFitVec[pSize-i-1];
				cFitVec[pSize-i-1]=tmp;
			}
		}
	}
}